#pragma once
#include "stdint.h"

typedef struct
{
    int16_t x;
    int16_t y;
} gt9xx_xydef;
typedef struct
{
    uint8_t nums;
    gt9xx_xydef point[5];

} gt9xx_tpdef;

// 0x814F-0x8175 寄存器
typedef struct
{
    uint8_t trackid;
    uint8_t xl; // x坐标
    uint8_t xh;
    uint8_t yl;
    uint8_t yh;
    uint8_t sizel;
    uint8_t sizeh;
    uint8_t reseverd0;

} gt9xx_tp_point_reg_def;

// 是否使用 INT pin 的中断
#define config_USING_INT_PIN 0

#define GT9XX_MY_VERSION 'D'

#define GT9XX_DEVICE_ID1 0x5D // rest 1后 int 5ms的 低 电平 0x5d左移后0xBA
#define GT9XX_DEVICE_ID2 0x14 // rest 1后 int 5ms的 高 电平 0x14左移后0x28

#define GT9XX_COMMAND 0x8040 // 命令

#define GT9XX_CONFIG 0x8047         // 0x8047-0x80FE配置表，0x80ff checksum  0x8100 更新标记
#define GT9XX_CONFIG_IT_MODE 0x804D // 0x8047-0x80FE配置表，0x80ff checksum  0x8100 更新标记

#define GT9XX_CONFIG_LENGTH (0X80FE - 0X8047 + 1)
#define GT9XX_CONFIG_CHECK 0X80FF

#define GT9XX_CONFIG_XY_MAX 0x8048 // 0x8048-0x804B xy 最大坐标

#define GT9XX_X_MAX (1024)
#define GT9XX_Y_MAX (768)

#define GT9XX_TOUCH_NUM 0x804C  // 触摸点数
#define GT9XX_PRODUCT_ID 0x8140 // GT911 ID
#define GT9XX_COORDINATE 0x8146 // 触摸坐标分辨率

#define GT9XX_TP_STATE 0X814E // GT911当前检测到的触摸情况
#define GT9XX_TP1 0x814F      // 0x814F- 0x8175 8个地址 触摸点1-5
#define GT9XX_TP2 0x8157
#define GT9XX_TP3 0x815F
#define GT9XX_TP4 0x8167
#define GT9XX_TP5 0x816F

void gt9xx_init();
uint8_t gt9xx_read_tp(gt9xx_tpdef *tp);
void gt9xx_read_reg(uint16_t reg_addr, uint8_t *read, uint16_t length);
void gt9xx_write_reg(uint16_t reg_addr, uint8_t *read, uint16_t length);